package be.rugbyclubleuven.rachel.domain;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.hibernate.annotations.WhereJoinTable;

import be.rugbyclubleuven.rachel.controller.util.CustomDateSerializer;

@Entity
@Table(name = "WEDS")
public class Wedstrijd {

	private Long id;
	private Date datum;
	private Seizoen seizoen;
	private Set<Lid> spelers = new HashSet<Lid>();
	private Set<Lid> nietSpelers = new HashSet<Lid>();
	private Ploeg ploeg;

	@Id
	@Column(name = "Wedid")
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@JsonSerialize(using = CustomDateSerializer.class)
	public Date getDatum() {
		return datum;
	}

	public void setDatum(Date datum) {
		this.datum = datum;
	}

	@ManyToOne
	@JoinColumn(name = "SEIID")
	public Seizoen getSeizoen() {
		return seizoen;
	}

	public void setSeizoen(Seizoen seizoen) {
		this.seizoen = seizoen;
	}

	@ManyToOne
	@JoinColumn(name = "PLOID")
	public Ploeg getPloeg() {
		return ploeg;
	}

	public void setPloeg(Ploeg ploeg) {
		this.ploeg = ploeg;
	}

	@ManyToMany
	@JoinTable(name = "WEDE", joinColumns = @JoinColumn(name = "WEDID"), inverseJoinColumns = @JoinColumn(name = "LIDID"))
	@WhereJoinTable(clause = "SWAFW='F'")
	@JsonIgnore
	public Set<Lid> getSpelers() {
		return spelers;
	}

	public void setSpelers(Set<Lid> spelers) {
		this.spelers = spelers;
	}

	@ManyToMany
	@JoinTable(name = "WEDE", joinColumns = @JoinColumn(name = "WEDID"), inverseJoinColumns = @JoinColumn(name = "LIDID"))
	@WhereJoinTable(clause = "SWAFW='T'")
	@JsonIgnore
	public Set<Lid> getNietSpelers() {
		return nietSpelers;
	}

	public void setNietSpelers(Set<Lid> nietSpelers) {
		this.nietSpelers = nietSpelers;
	}

}